package src;
import java.util.Stack;

public abstract class Robot {

        protected int combustible;
        protected int maxCombustible;
        protected int puntaje;
        protected int color;
        protected boolean pintar;
        protected char direccion;
        protected Posicion pos;
        protected Stack<Coleccionable> baul;
        
        public Robot(Posicion p, char d){
                pos=p;
                direccion=d;
                puntaje=0;
                pintar=false;
                color=0;
                combustible=40;
                baul=new Stack<Coleccionable>();
        }
        //comandos
        
        public void avanzar(Transitable p){
                combustible=combustible-p.getGasto();
                switch(direccion){
                case 'N':
                        pos.setY(pos.getY()-1);
                        break;
                case 'O':
                        pos.setX(pos.getX()-1);
                        break;
                case 'S':
                        pos.setY(pos.getY()+1);
                        break;
                case 'E':
                        pos.setX(pos.getX()+1);
                        break;
                }
                
                if(p.hayPremio()){
                	Premio prem=p.getPremio();
                	prem.entregarPremio(this);
                	p.eliminarPremio();
                }
                	
        }
        
        public void girarIzquierda(Transitable p){
                combustible= combustible- p.getGasto();
                switch(direccion){
                        case 'N':
                                direccion='O';
                                break;
                        case 'O':
                                direccion= 'S';
                                break;
                        case 'S':
                                direccion= 'E';
                                break;
                        case 'E':
                                direccion= 'N';
                                break;
                }               
                        
        }
        
        public void girarDerecha(Transitable p){
                combustible= combustible- p.getGasto();
                switch(direccion){
                        case 'N':
                                direccion='E';
                                break;
                        case 'O':
                                direccion= 'N';
                                break;
                        case 'S':
                                direccion= 'O';
                                break;
                        case 'E':
                                direccion= 'S';
                                break;
                }               
                
        }
        
        public void cambiarColor(int color){
                this.color=color;
        }
        
        public void pincel(){
                if (pintar)
                        pintar=false;
                else
                        pintar=true;
        }
        
        public void recolectar(Coleccionable col){
                if(baul.size()<=20)
                        baul.push(col);
                
        }
        
        public abstract void accionEspecial();
        
        public void sumarCombustible(int n){
            if(n+combustible<=maxCombustible)    
            	combustible+=n;
            else
            	combustible=maxCombustible;
        }
        
        public void sumarPuntos(int puntos){
                puntaje+=puntos;
        }
        

        public abstract void recibirPremioEspecial(Premio p);
        
        public void setPosicion(Posicion p){
        	pos=p;
        }
        
        //consultas
        
        public Coleccionable descargar(){
                Coleccionable col=null;
                if(!baul.isEmpty())
                        col=baul.pop();
                return col;
        }
        
        public Posicion getPosicion(){
                return pos;
        }
        
        public char getDireccion(){
                return direccion;
        }
        
        public boolean estaVacio(){
                return combustible==0;
        }
        
        public boolean puedeMover(Transitable piso){
                return combustible>=piso.getGasto();
        }
        
        public abstract boolean esEspecial();
        
        
        
}


